/* 
两个绝顶聪明的人,从一堆带有分值的数组中拿牌, 一次一张,只能从左右两边
求出最后分数高的人的分数
*/

function win(arr) {
  if(arr.length == 0 && arr == null) {
    return 0
  }
  // f 函数是我先拿能得到的答案, s是后选
  return Math.max(f(arr, 0, arr.length-1), s(arr, 0, arr.length-1))
}

// 先拿
function f(arr, L, R) {
  // 拿到了最后面了
  if(L == R) {
    return arr[L]
  }
  // 我的每一次选择都要是考虑之后后选的最优解 加上这次的选择的最大值
  return Math.max(arr[L] + s(arr, L+1, R), arr[R] + s(arr, L, R-1))
}

// 后拿
function s(arr, L, R) {
  if(L == R) {
    return 0
  }
  // 后拿一定拿到的是左右的少一个的最小值..
  return Math.min(f(arr, L+1, R), f(arr, L, R-1))
}